"""
器官分割与重建得第一步，将dcm数据转变为nii格式
"""
import os
import subprocess

def convert_with_dcm2niix(input_folder:str,output_folder:str,output_filename="%p_%s"):
    dcm2niix_path="dcm2niix"

    os.makedirs(output_folder, exist_ok=True)
    command = [
        dcm2niix_path,
        "-z", "y",  # 压缩输出为 .nii.gz
        "-f", output_filename,  # 输出文件名格式
        "-o", output_folder,  # 输出目录
        "--verbose","n",  # 减少不必要输出
        input_folder  # 输入目录
    ]

    print(f"--- 开始转换 ---")
    try:
        subprocess.run(command, check=True,capture_output=True,text=True)

        if len(os.listdir(output_folder)) > 0:
            print("转换成功！已在输出文件夹中生成 NIfTI 文件。")
            return True
        else:
            print("警告：转换函数已执行，但输出文件夹为空。")
            print("请确认输入文件夹中包含有效的、可识别的 DICOM 序列。")
            return False
    except subprocess.CalledProcessError as e:
        print(f"在转换过程中发生了一个错误: {e.stderr}")
        return False
    except FileNotFoundError:
        print("错误：未找到 dcm2niix 可执行文件。请确保已正确安装并配置了 dcm2niix。")
        return False
    except Exception as e:
        print(f"在转换过程中发生了一个未知错误: {e}")
        return False
    
if __name__ == "__main__":
    input_folder_path = "E:\CODE_File\SegRecCTUI\\backend\data\dicom_data\patient001\Abdomen-V  2.0  B30f"  
    output_folder_path = "E:\CODE_File\SegRecCTUI\\backend\data\\nifti_output\patient001\Abdomen-V  2.0  B30f"
    
    convert_with_dcm2niix(input_folder_path,output_folder_path)
